﻿using QuanLyThuVien.DTO;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using QuanLyThuVien.Supporter;
using System.Data.SqlClient;

namespace QuanLyThuVien.DAL
{
    //----------------------------------------------------------------------
    //Desc: class kết nối với bảng LOAIDG
    //----------------------------------------------------------------------
    public class DALLoaiDG
    {
        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public DALLoaiDG()
        { }

        //----------------------------------------------------------------------
        //Desc: chuyển dòng dữ liệu thành LOAIDG
        //----------------------------------------------------------------------
        public DTOLoaiDG ConvertToLoaiDG(DataRow row)
        {
            DTOLoaiDG loaiDG = new DTOLoaiDG();
            loaiDG.MaLoaiDG = row["MaLoaiDG"].ToString();
            loaiDG.TenLoaiDG = row["TenLoaiDG"].ToString();

            return loaiDG;
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách loại độc giả
        //----------------------------------------------------------------------
        public List<DTOLoaiDG> LayDSLoaiDG()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spLoaiDocGia_LayDanhSachLoaiDG";
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);

            if (data == null)
                return null;
            else
            {
                List<DTOLoaiDG> list = new List<DTOLoaiDG>();
                for (int i = 0; i < data.Rows.Count; i++)
                    list.Add(ConvertToLoaiDG(data.Rows[i]));
                return list;
            }
        }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách loại độc giả, trả về datatable
        //----------------------------------------------------------------------
        public DataTable LayDanhSachLoaiDocGia()
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spLoaiDocGia_LayDanhSachLoaiDG";
            return DatabaseManager.DbConnection.ExecuteStoredProcedure(spName);
        }

        //----------------------------------------------------------------------
        //Desc: tên loại độc giả
        //----------------------------------------------------------------------
        public string LayTenLoaiDG(string maloaidg)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spLoaiDocGia_LayTenLoaiDG";
            SqlParameter sqlprMaLoaiDG = new SqlParameter("@MaLoaiDG", SqlDbType.VarChar, 15) { Value = maloaidg };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaLoaiDG);
            if (data == null)
                return null;
            return data.Rows[0][0].ToString();
        }

        //----------------------------------------------------------------------
        //Desc: lấy thông tin loại độc giả
        //----------------------------------------------------------------------
        public DTOLoaiDG LayThongTinLoaiDG(string maloaidg)
        {
            if (DatabaseManager.DbConnection == null)
                return null;
            string spName = "spLoaiDocGia_LayThongTinLoaiDG";
            SqlParameter sqlprMaLoaiDG = new SqlParameter("@MaLoaiDG", SqlDbType.VarChar, 15) { Value = maloaidg };
            DataTable data = DatabaseManager.DbConnection.ExecuteStoredProcedure(spName, sqlprMaLoaiDG);
            if (data == null || data.Rows.Count == 0)
                return null;
            return ConvertToLoaiDG(data.Rows[0]);
        }

        //----------------------------------------------------------------------
        //Desc: đếm loại độc giả
        //----------------------------------------------------------------------
        public int DemLoaiDG()
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spLoaiDocGia_DemLoaiDG";
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName);
            if (obj == null)
                return -1;

            int dem;
            try
            {
                dem = (int)obj;
            }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: đếm mã loại độc giả
        //----------------------------------------------------------------------
        public int DemMaLoaiDG(string maloaidg)
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spLoaiDocGia_DemMaLoaiDG";
            SqlParameter sqlprMaLoaiDG = new SqlParameter("@MaLoaiDG", SqlDbType.VarChar, 15) { Value = maloaidg };
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName, sqlprMaLoaiDG);
            if (obj == null)
                return -1;

            int dem;
            try
            {
                dem = (int)obj;
            }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: đếm số độc giả của loại độc giả...
        //----------------------------------------------------------------------
        public int DemSoDGCuaLoaiDG(string maloaidg)
        {
            if (DatabaseManager.DbConnection == null)
                return -1;
            string spName = "spLoaiDocGia_DemSoDocGia";
            SqlParameter sqlprMaLoaiDG = new SqlParameter("@MaLoaiDG", SqlDbType.VarChar, 15) { Value = maloaidg };
            object obj = DatabaseManager.DbConnection.ExecuteStoredProcedureScalar(spName, sqlprMaLoaiDG);
            if (obj == null)
                return -1;
            int dem;
            try { dem = (int)obj; }
            catch { return -1; }
            return dem;
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật loại độc giả
        //----------------------------------------------------------------------
        public bool CapNhat(DTOLoaiDG loaidg)
        {
            if (DatabaseManager.DbConnection == null)
                return false;
            string spName = "spLoaiDocGia_CapNhapLoaiDG";
            SqlParameter sqlprThaoTac = new SqlParameter("@ThaoTac", SqlDbType.Int) { Value = 1 };
            SqlParameter sqlprMaLoaDG = new SqlParameter("@MaLoaiDG", SqlDbType.VarChar, 15) { Value = loaidg.MaLoaiDG };
            SqlParameter sqlprTenLoaiDG = new SqlParameter("@TenLoaiDG", SqlDbType.NVarChar, 70) { Value = loaidg.TenLoaiDG };
            return DatabaseManager.DbConnection.ExecuteStoredProcedureNonQuery(spName, sqlprThaoTac, sqlprMaLoaDG,
                sqlprTenLoaiDG);
        }

        //----------------------------------------------------------------------
        //Desc: xóa loại độc giả
        //----------------------------------------------------------------------
        public bool Xoa(DTOLoaiDG loaidg)
        {
            if (DatabaseManager.DbConnection == null)
                return false;
            string spName = "spLoaiDocGia_CapNhapLoaiDG";
            SqlParameter sqlprThaoTac = new SqlParameter("@ThaoTac", SqlDbType.Int) { Value = 0 };
            SqlParameter sqlprMaLoaDG = new SqlParameter("@MaLoaiDG", SqlDbType.VarChar, 15) { Value = loaidg.MaLoaiDG };
            SqlParameter sqlprTenLoaiDG = new SqlParameter("@TenLoaiDG", SqlDbType.NVarChar, 70) { Value = loaidg.TenLoaiDG };
            return DatabaseManager.DbConnection.ExecuteStoredProcedureNonQuery(spName, sqlprThaoTac, sqlprMaLoaDG,
                sqlprTenLoaiDG);
        }

    }
}
